package converter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Erweitert die Produktklasse um Buch-spezifische Datenelemente wie den Verlag oder die ISBN.
 * 
 * @author Patrick Bauer
 */
public class BookElement extends XMLElement {
    /**
     * Liste der Autoren.
     */
    private ArrayList<String> autor = new ArrayList<String>();
    
    /**
     * Der Verlag.
     */
    private String verlag = "";
    
    /**
     * Die ISBN.
     */
    private String isbn = "";
    
    /**
     * Die Bindung.
     */
    private String bindung = "";
    
    /**
     * Die Edition.
     */
    private String edition = "";
    
    /**
     * Die Seitenanzahl.
     */
    private String seitenanzahl = "";
    
    
    /**
     * Setzt die ISBN.
     * 
     * @param isbn die ISBN
     */
    public void setIsbn(String isbn){
        this.isbn = isbn;
    }
    
    /**
     * Setzt den Verlag.
     * @param verlag der Verlag
     */
    public void setVerlag(String verlag){
        this.verlag = verlag;
    }
    
    /**
     * Setzt die Bindung
     * @param bindung die Bindung
     */
    public void setBindung(String bindung){
        this.bindung = bindung;
    }
    
    
    /**
     * Fuegt einen Autor hinzu.
     * 
     * @param author ein Autor
     */
    public void setAutor(String author){
        this.autor.add(author);
    }
    
    /**
     * Setzt die Edition.
     * 
     * @param edition die Edition
     */
    public void setEdition(String edition){
        this.edition = edition;
    }
    
    /**
     * Setzt die Seitenanzahl.
     * 
     * @param pageCount die Anzahl der Seiten
     */
    public void setSeiten(String pageCount){
        this.seitenanzahl = pageCount;
    }
    
    /**
     * Erweitert die Anzahl der unbekannten allgemeinen Datenelemente um unbekannte <br>
     * Buch-spezifische Datenelemente.
     * 
     * @return die Anzahl aller unbekannten Datenelemente
     */
    @Override
    public int countUnknown(){
        int i = super.countUnknown();
        
        if(this.verlag.isEmpty()) {
            i++;
        }
        
        if(this.autor.isEmpty()) {
            i++;
        }
        
        if(this.isbn.isEmpty()) {
            i++;
        }
        
        return i;
    }
    
    /**
     * Schreibt das eigene Buch-Produkt Objekt in valider Form in die uebergebene XML Datei.
     * 
     * @param writer das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs 
     */
    @Override
    public void write(FileWriter writer) throws IOException {
        writer.write("\t\t\t<Buch>" + System.getProperty("line.separator"));
        
        //title
        if(this.title.isEmpty()) {
            writer.write("\t\t\t\t<Titel unbekannt=\"1\"></Titel>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Titel unbekannt=\"0\">" + title.get(0).toString() + "</Titel>" + System.getProperty("line.separator"));
        }
        
        //verlag
        if(this.verlag.isEmpty()) {
            writer.write("\t\t\t\t<Verlag unbekannt=\"1\"></Verlag>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Verlag unbekannt=\"0\">" + this.verlag + "</Verlag>" + System.getProperty("line.separator"));
        }
        
        //autor
        if(this.autor.isEmpty()) {
            writer.write("\t\t\t\t<Autor unbekannt=\"1\"></Autor>" + System.getProperty("line.separator"));  
        } else {
            for(Object autorItem : this.autor.toArray()) {
                writer.write("\t\t\t\t<Autor unbekannt=\"0\">" + autorItem.toString() + "</Autor>" + System.getProperty("line.separator"));
            }
        }
        
        super.writeEan(writer);        
        
        //isbn
        if(this.isbn.isEmpty()) {
            writer.write("\t\t\t\t<ISBN unbekannt=\"1\"></ISBN>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<ISBN unbekannt=\"0\">" + this.isbn + "</ISBN>" + System.getProperty("line.separator"));
        }
        
        super.writeVeroeffentlicht(writer);
        
        //bindung
        if(!this.bindung.isEmpty()) {
            writer.write("\t\t\t\t<Bindung>" + this.bindung + "</Bindung>" + System.getProperty("line.separator"));
        }
        
        //edition
        if(!this.edition.isEmpty()) {
            writer.write("\t\t\t\t<Edition>" + this.edition + "</Edition>" + System.getProperty("line.separator"));
        }
        
        //seitenanzahl
        if(!this.seitenanzahl.isEmpty()) {
            writer.write("\t\t\t\t<SeitenAnzahl>" + this.seitenanzahl + "</SeitenAnzahl>" + System.getProperty("line.separator"));
        }
        
        writer.write("\t\t\t</Buch>" + System.getProperty("line.separator"));
    }
    
}
